﻿using System;
using System.Web.UI.WebControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Alimentacion;
using BussinessLogicTecnoPez.Produccion.Compras;
using Tecnopez.Globals;

public partial class Modules_Alimentacion_ABMAlimentos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/tar.png";
        master.Titulo = "Gestión de alimentos.";
  
        cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

        popInsumo.ObjType = typeof(Insumo);

        grdPrincipal.setupGrid(typeof(Alimento), cargarGrilla, false, true, ViewState);

        if (!IsPostBack)
        {
            this.SetMode(PageMode.ListMode);
        }
    }

    private void cargarGrilla()
    {
        if (ViewState[grdPrincipal.PageDataViewOrderKey] == null)
        {
            Alimento.getManager.AddOrder("Nombre",
                GenericManager<Alimento>.Order.orderDirection.DESC);
        }
        else
        {
            Alimento.getManager.AddOrder(ViewState[grdPrincipal.PageDataViewOrderKey].ToString(),
                (GenericManager<Alimento>.Order.orderDirection)ViewState[grdPrincipal.PageDataViewOrdenDireccionKey]);
        }
        Alimento.getManager.AddFilter("nombre", GenericManager<Alimento>.filterOperator.Like, txtBuscarNombre.Text + "%");
        Alimento.getManager.AddFilter("descripcion", GenericManager<Alimento>.filterOperator.Like, txtBuscarDescripcion.Text + "%");
        Alimento.getManager.AddFilter("baja", GenericManager<Alimento>.filterOperator.Equals, null);

        grdPrincipal.DataSource = Alimento.getManager.GetFilter();
        grdPrincipal.DataBind();
    }

    private void SetMode(PageMode mode)
    {
        ViewState["PageMode"] = mode;
        switch (mode)
        {
            case PageMode.ListMode:
                multiPrincipal.ActiveViewIndex = 0;
                break;
            case PageMode.NewMode:
                multiPrincipal.ActiveViewIndex = 1;
                txtCodigo.Text = "";
                txtCeniza.Text = "";
                txtDescripcion.Text = "";
                txtFibra.Text = "";
                txtGrasa.Text = "";
                txtHumedad.Text = "";
                txtNombre.Text = "";
                popInsumo.ItemSelected = "";
                txtProteinas.Text = "";
                Functions.setearReadOnly(false, txtCeniza, txtDescripcion,
                    txtFibra, txtGrasa, txtHumedad, txtNombre, txtProteinas);
                popInsumo.Enable = true;

                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;

                break;
            case PageMode.EditMode:
                multiPrincipal.ActiveViewIndex = 1;

                Functions.setearReadOnly(false, txtCeniza, txtDescripcion, txtFibra,
                    txtGrasa, txtHumedad, txtNombre, txtProteinas);
                popInsumo.Enable = true;

                cmdAceptar.Visible = true;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = false;
                cmdEliminar.Enabled = false;
                break;
            case PageMode.ViewMode:
                multiPrincipal.ActiveViewIndex = 1;

                Functions.setearReadOnly(true, txtCeniza, txtDescripcion, txtFibra,
                    txtGrasa, txtHumedad, txtNombre, txtProteinas);
                popInsumo.Enable = false;


                cmdAceptar.Visible = false;
                cmdCancelar.Enabled = true;
                cmdEditar.Enabled = true;
                cmdEliminar.Enabled = true;
                break;
        }

    }

    protected void grdPrincipal_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (grdPrincipal.Rows[0].Cells[0].Text == "&nbsp;")
        {
            Functions.MessageBox("No hay elementos en la grilla.", this);
            return;
        }
        if (e.CommandName == "ver")
        {

            int idAlimento = int.Parse(grdPrincipal.DataKeys[System.Convert.ToInt32(e.CommandArgument)].Value.ToString());
            Alimento objAlimento = Alimento.getManager.GetOneByPrimaryKey(idAlimento);
            if (objAlimento != null)
            {
                txtCeniza.Text = objAlimento.Ceniza.ToString();
                txtCodigo.Text = objAlimento.IdAlimento.ToString();
                txtDescripcion.Text = objAlimento.Descripcion;
                txtFibra.Text = objAlimento.Fibra.ToString();
                txtGrasa.Text = objAlimento.Grasa.ToString();
                txtHumedad.Text = objAlimento.Humedad.ToString();
                txtNombre.Text = objAlimento.Nombre;
                txtProteinas.Text = objAlimento.Proteinas.ToString();
                popInsumo.ItemSelected = objAlimento.Insumo;
                SetMode(PageMode.ViewMode);
            }
            else
            {
                Functions.MessageBox("No se puede mostrar el item.", this);
            }
        }

    }
    protected void cmdNuevo_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.NewMode);
    }
    protected void cmdEditar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.EditMode);
    }
    protected void cmdEliminar_Click(object sender, EventArgs e)
    {
        Alimento objAlimento = Alimento.getManager.GetOneByPrimaryKey(Convert.ToInt32(txtCodigo.Text));
        if (objAlimento != null)
        {
            objAlimento.Baja = "S";
            if (Alimento.getManager.Update(objAlimento))
            {

                Functions.MessageBox("Alimento dado de baja con éxito.", this);
                this.SetMode(PageMode.ListMode);
                cargarGrilla();
            }
            else
            {
                Functions.MessageBox("No se pudo dar de baja el alimento.", this);
            }
        }
        else
        {
            Functions.MessageBox("No se puede eliminar este alimento.", this);
        }

    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        SetMode(PageMode.ListMode);
    }

    private PageMode getMode()
    {
        if (ViewState["PageMode"] == null)
            return PageMode.ModeNotFound;
        return (PageMode)ViewState["PageMode"];
    }

    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            Alimento objAlimento;
            switch (getMode())
            {
                case PageMode.NewMode:
                    objAlimento = new Alimento();
                    obtenerDatosDesdeLaInterfaz(objAlimento);
                    if (Alimento.getManager.Insert(objAlimento))
                    {
                        Functions.MessageBox("Se inserto el registro en la base de datos.", this);
                        this.SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }

                    else
                    {
                        Functions.MessageBox("Error al insertar el registro en la base de datos.", this);
                    }
                    break;

                case PageMode.EditMode:
                    objAlimento = Alimento.getManager.GetOneByPrimaryKey(Convert.ToInt32(txtCodigo.Text));
                    obtenerDatosDesdeLaInterfaz(objAlimento);
                    if (objAlimento != null)
                    {
                        if (Alimento.getManager.Update(objAlimento))
                        {
                            Functions.MessageBox("Se actualizó con éxito el alimento.", this);
                            this.SetMode(PageMode.ListMode);
                            cargarGrilla();
                        }
                        else
                        {
                            Functions.MessageBox("Error al actualizar el alimento.", this);
                        }
                    }
                    else
                    {
                        Functions.MessageBox("El alimento que quizó modificar ya no existe en la base de datos.", this);
                    }
                    break;

                default:
                    Functions.MessageBox("No se pudo realizar la operación.", this);
                    break;
            }
        }
        else
        {
            Functions.MessageBox("Los datos no son correctos, por favor verifique los mismos y vuelva a intentarlo.", this);
            return;
        }
    }

    private void obtenerDatosDesdeLaInterfaz(Alimento objAlimento)
    {
        if (txtCeniza.Text != "")
            objAlimento.Ceniza = Convert.ToDecimal(txtCeniza.Text);

        objAlimento.Descripcion = txtDescripcion.Text;
        if (txtFibra.Text != "")
            objAlimento.Fibra = Convert.ToDecimal(txtFibra.Text);
        if (txtGrasa.Text != "")
            objAlimento.Grasa = Convert.ToDecimal(txtGrasa.Text);
        if (txtHumedad.Text != "")
            objAlimento.Humedad = Convert.ToDecimal(txtHumedad.Text);
        objAlimento.Insumo = popInsumo.ItemSelected as Insumo;
        objAlimento.Nombre = txtNombre.Text;
        if (txtProteinas.Text != "")
            objAlimento.Proteinas = Convert.ToDecimal(txtProteinas.Text);

    }
}
